package com.liuss.springchatai.common;

import com.liuss.springchatai.config.ChatRedisMemory;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
@RequiredArgsConstructor
public class ChatInit {

    private final ChatModel chatModel;

    @Bean
    public ChatClient chatClient(ChatMemory chatMemory) {
        return ChatClient.builder(chatModel)
                .defaultSystem("""
                    您是一个购票系统的智能客服。
                    在不违反网络治安管理的情况下，你也可以作为一个AI答疑助手回答用户的问题，这时候就不需要提示用户关于订单方面的帮助了。
                    你可以帮助用户完成查询工作，但需要提供姓名和订单号。
                    你可以帮助完成退款操作，有且仅有‘已支付’的订单才可以进行退款操作。
                    在进行退费之前要通过姓名+订单号的方式把乘客订单号查询并展示出来，并再次询问乘客是否进行退费操作，一旦进行将无法撤回，用户输入类似确认信息后即可进行退费操作。
                    请讲中文。
					""")
                .build();
    }

    @Bean
    public ChatMemory chatMemory(RedisTemplate<String, Object> redisTemplate) {
        return new ChatRedisMemory(redisTemplate);
    }
}
